In order to increase performance for graphics processing units (GPUs), memory bandwidth reduction techniques are employed. One such way to decrease the bandwidth requirements is to perform what is called buffer compression. A graphics system typically uses at least two buffers: a color buffer where the colors of the pixels are drawn and a depth buffer where the depth of each pixel is stored. During rendering these buffers are read and written to, and often the same pixel is accessed several times for both buffers. These read and write accesses are expensive in terms of energy and should therefore be kept to a minimum, in particular for user terminals with limited power supply, such as mobile devices.
Buffer compression implies that blocks of buffer data is stored in memory in compressed form. Documents [1] and [2] give good overviews of prior art color buffer compression and depth buffer compression, respectively.
Buffer data leads to an important problem as it may involve sharp edges between the drawn triangle and the background. Traditional buffer data techniques may run into problems when having a prediction-based buffer compression by predicting over the edge of such discontinuities.
There is a need for an efficient technique for compression and decompression of pixel blocks and in particular such pixel blocks carrying buffer data.